论文解读:Physics of Language Models(面向应用层读者)【2024.7】
全文共约8k字。
本专栏的论文选读是面向那些不从0训练LLM的读者,例如中间件层、应用层的从业者等。
1、论文及链接
本次推荐的《Physics of Language Models》实际上是一个系列,目前公开的文章如下:
Part 1, Learning Hierarchical Language Structures
https://arxiv.org/abs/2305.13673
Part 2,文章会于近期发布。
Part 3.1, Knowledge Storage and Extraction
https://arxiv.org/abs/2309.14316
Part 3.2, Knowledge Manipulation
https://arxiv.org/abs/2309.14402
Part 3.3, Knowledge Capacity Scaling Laws
https://arxiv.org/abs/2404.05405
作者的其他文章可以通过以下链接查看:
https://arxiv.org/search/cs?searchtype=author&query=Allen-Zhu,+Z
作者之前也对该系列进行了分享,并在最近的ICML 2024会议上做了一个整合报告,其中包括了Part 2的内容。考虑到读者的时间,我推荐观看该整合报告的视频即可,链接如下:
https://www.bilibili.com/video/BV1Yw4m1k7nH/
2、报告内容选评
整个报告长达2h,本节将节选其中的一些结论和对模型层之外的其他读者有参考价值的内容。需要强调的是,原报告中的解释过程和思路对于理解这些结论至关重要,而本文只会摘录一些结论并附上我的评论。如果读者对某些结论感到困惑或有异议,建议直接观看原视频。
为了区分原报告的观点和个人评论,原报告的观点将采用引文格式。
报告的讲述顺序与发表顺序不同,以下内容将按照报告的顺序进行说明。
说明:
原作者更多使用知识(Knowledge)这个词,但实际上在本文中其意思更接近于“信息”,因此以下会混用这两个词。原作者的观点会更多沿用“知识”这个词,而我的评论则更多使用“信息”这个词。两者在本文中没有显著的概念范围差异。
以下提到的GPT-2规模大多是指0.1B参数,即对应于GPT-2-small。
2.1、总体思路
原作者的研究思路相当优雅,尽量做控制变量的对照实验,力求消除不可控的因素。其主要策略包括:
自行合成数据进行预训练,消除其他外来不确定成分数据的干扰。
由于成本限制,主要在GPT-2参数规模的模型上进行对比实验。
关注于模型结构无关的共性,因此对各种类BERT和decoder-only模型结构都进行测试。
然而,该研究存在一个可被质疑的点:在0.1B规模上的实验结果是否在更大规模的模型(如8B、70B甚至更大)上依然显著?这确实是个问题,模型层的社区已经形成共识:仅在小规模上有效的技巧未必适用于大规模的模型,除非有相应的“scaling law”(即模型表现随模型规模的经验公式)可以外推预测在更大规模模型上的效果仍然显著。而该系列研究似乎没有提供关于规模扩展性的实验结果,因此存在在更大规模模型上效果不显著的风险。因此,对该系列工作的结论的信任度很大程度上取决于“其与读者自身认知和直觉的契合程度”。
原作者的研究思路倡议原话:
将智能的概念分解成积木,然后逐一研究它们,比如语言结构、知识或推理等等。让我们逐个研究它们,不要把所有东西混合在一起,那就太复杂了。
让我们建立合成数据,在一个受控的环境中,在一个理想化的环境中研究一切,这样你就可以调整数据的难度、数据的类型、数据的数量或数据的格式,并看看这些单独的东西如何影响模型的性能。通过这种方式,你可以开始获得关于如何训练未来下一代语言模型的非常明智的知识,比如你应该做什么。
真正使实验具有高度可重复性。因此,如果预训练模型需要花费1000万美元,那么这将太昂贵了,你不能做重复的实验。如果你想尝试七种不同的东西,你不能把每种东西都调高调低来进行对照实验,以找出最终结果的确切原因。因此,我们真的建议研究更小的模型,可能只有0.1B参数大小的模型。
通过Probe技术来观察语言模型的内部运作。
2.2、知识提取(Part 3.1)
本节内容从视频00:11:37开始
正确的知识提取能力需要在预训练阶段进行学习,而无法仅通过微调阶段来完成。这意味着在预训练阶段必须增加针对知识提取任务的数据增强(Data Augmentation)才能实现。该结论适用于各种模型大小、架构、微调方式、训练方式和超参数。
幸运的是,并不需要对所有数据都进行数据增强才能实现知识提取能力的学习。该能力的学习在不同知识上、不同热度的知识上的学习具有可迁移性。由于热门知识在实际数据中经常以多种表达方式存在,因此在这方面我们有一些免费午餐。
BERT类双向模型即使通过数据增强也无法学习到这一能力。
由于原作者每次训练都是基于为每个任务专门准备的合成数据进行完整训练,因此这里没有CPT(Continue PreTrain 继续预训练,或称post-train等)的环节。在实际应用的LLM炼丹过程中,仅在CPT阶段是否有效增加这个能力原文并未讨论。我估计即使可以,也需要CPT阶段的训练量不小。
或许有些读者对此惊讶,这里提供一种我的解读视角:知识和能力的表达与存储方式主要在预训练(PT)阶段学到并固化,后续的微调(SFT)和RLHF阶段(以下省略提及RLHF)很少能够大幅改变其表达方式和存储方式。因此,如果一种能力需要的某些基础在PT阶段未能学到,那么在SFT阶段几乎无法实现。CPT阶段介于这两者之间,是较为模糊的地带。
在LLM训练过程中,模型总能很好地拟合给定的数据集,但这并不意味着其中知识的存储方式符合用户的期望。模型可能使用了意料外相关性进行存储,但这不符合人类用户的习惯。而针对该任务的数据增强可以让模型更倾向于优先学习学习难度最低的知识表达方式,针对性的数据增强可以让符合人类习惯的知识表达方式的数据比例,从而降低模型学习这种知识表达方式的难度。
不必对该任务涉及的所有知识进行全面的数据增强,就能取得较好的泛化效果,这是LLM带给我们的免费的午餐。
2.3、知识处理(Part 3.2)
本节内容从视频00:27:05开始
CoT式的输出形式,即先列举信息然后再对信息进行处理,是对知识处理任务非常重要的。如果不采用这种CoT方式,LLM连一些简单的任务都无法有效完成。即使是GPT4也需要依赖这种CoT格式才能有效地解决这个问题。
在预训练阶段增加CoT形式的数据,但在输出时没有采用CoT形式,也不能提高结果的正确率。
这种知识处理过程的CoT与推理中涉及的CoT并不同。
这一结论非常有力,表明对于LLM来说,有效的信息处理仍然高度依赖于这种CoT的格式,即先列举信息,然后再进行处理。这意味着,在应用中让LLM直接回答一个信息处理类的问题而不进行“中间过程演算”是一种效果很差的用法。在现有LLM架构下,还无法指望有一个很强的模型和很快的推理方案来让模型直接回答信息处理类的问题。上层应用在策略流程设计上必须对此进行考虑。
知识的逆向检索是不可能的,微调阶段也无法增加这一能力,唯一的解决办法是在预训练数据中增加反向顺序知识的数据增强扩增数据来实现。
双向模型如BERT等,也无法自动实现这一功能。
GPT-4同样不行。
关于LLM无法逆向检索信息的现象,较早对其进行讨论的是(《The Reversal Curse: LLMs trained on "A is B" fail to learn "B is A"》, https://arxiv.org/abs/2309.12288)。这项研究进一步验证了LLM和BERT框架都无法解决这一问题,唯有在原始数据中增加相应的逆向知识才能有效。
这一结论显得较为悲观,信息只能按照训练数据中的顺序来被检索出来。在许多实际应用场景中,一个信息往往有多个条件,而所有条件的不同顺序排列组合会导致组合爆炸。这也体现了LLM和人脑的一个主要差别:人脑很擅长做不完全条件下的联想检索,而这对LLM来说几乎是不可能的。
对于应用层的人来说,如果遇到了这种问题,靠微调是无法解决的。要么依赖非LLM的方案,要么就得找LLM原厂进行针对性的数据增广,训练一个新的LLM。虽然完整预训练一个模型的成本较高,但考虑到实际应用场景中可以组合多个模型,定制训练一个规模在7B左右的模型或许已经足够。
2.4、知识容量的Scaling Law(Part 3.3)
本节内容从视频00:37:06开始
LLM对知识的存储能力符合 2 bit / param 的线性scaling law,前提是该知识在预训练阶段被充分训练,标准大致是一个知识要出现1000次以上,相同语义的不同表达都可以算作是多次出现。
该能力只与模型参数量有关,而与模型结构、深度、训练超参数等都无关,甚至即使去掉MLP层也是如此。
但如果知识的训练不够充分(例如出现次数降低到100次),其存储能力大概会降低到 1 bit / param。在这种情况下,不同模型架构的差异开始显现:Llama和Mistral的架构表现要比GPT-2差大约1.3倍。
将GPT-2的MLP层缩减到1/4,其存储能力没有太明显的损失,但如果完全移除MLP层,则会有显著的损失。
如果把Llama的结构中GatedMLP换成标准的MLP,其存储能力将恢复到与GPT-2一致。
这里的bit是语义意义上的,即数据集中的语义相同但措辞可能不同的数据条目的模板都算做相同的信息,指对其中填入的不同数值/内容进行信息计量,即只考虑语义上不同的信息。该实验是在针对单问题数据集上训练和测试的。
该测试中的bit的定义并不是我们一般意义上文本的信息熵,而是针对单个问题的。在混合有很多场景数据和问题的情况下,scaling law公式的参数可能会有所不同。
这个实验给我们的一个定量信息是:LLM需要同一个知识的1000次训练才能够有效学习,降低到100次训练都只能算成是不够充分的训练。LLM的样本利用率跟我们对传统机器学习方案的印象一致:样本利用率仍然很低。因此,不要期望简单在数据中混入少量稀有知识的数据就能够让模型学到。再考虑到Part 3.1知识提取的结论,符合人类习惯的数据增强方式几乎是必要的,而且目标是增加到1000份。再考虑到知识检索方向的问题,还需要乘以所有会使用到的不同检索方向的组合可能数量。
当然,原作者的实验只是在小参数量的模型上进行的。我个人估计:更大参数量的模型能够从不同的信息中发现更多高层次的规律,对于比较相通的知识,相互之间的迁移学习效果会更强,可以降低需要的数据量,但数量级应该还是接近于该实验结果的。在多领域数据共同训练下,免费午餐是有的,但也有限。
在训练数据中加入质量不高的数据会剧烈地降低模型的知识容量,甚至可能导致模型知识容量缩减到原来的1/20。即使通过增加训练时间和数据量能有所改善,效果仍然明显不如从前,可能只恢复到原来的1/3。
然而,这里有个免费的午餐:只需在每条数据前添加数据的来源标签/领域标签,就可以恢复模型的知识容量。
这种现象可以用以下方式解释:质量不高的数据中混有的错误方式也是一种信息,而LLM并不能自动地区分出这些,尤其是在所有数据无差别地混在一起的时候。模型在学习这些错误信息时会占用其知识容量,特别是错误类型繁多,这对模型容量的占用较大。
通过添加来源标签,模型能够区分不同来源的数据。相比之下,高质量的数据的信息量较少(包含的错误模式信息更少),更容易被模型学习到,因此模型会优先学习这些更容易学习的模式。低质量信息的错误模式往往千差万别且较为长尾,但与高质量信息一致的内容也会被优先学习。
模型并不能自动识别优质内容,而是倾向于优先学习更容易的内容,即“信息密度更低”的内容。
那么,对于那些错误模式很常见的信息呢?它们可能已经不能叫做(狭义的)错误或者低质量数据。或许我们应该称其为人类群体中的某种常见偏见、谬误、不同的观点流派等等。尽管我们可能仍然可以在语义上对其进行评分评价,但我们已经不能否认其常见性。它们是人类社会中的一种常见模式,其存在本身就已经是一种常识。人类并不完美,因此人类社会的投影(文字记录)也必然存在着不完美。当然,由于数据生产过程的因素,数据集中大量出现的内容未必完全反映人类社会中的分布,这就依赖于数据清洗过程来对齐数据集的分布和人类社会的分布。
2.5、小学数学推理(Part 2)
本节内容从视频00:53:29开始
Part 2.1 推理能力与隐性推理过程
研究的问题及数据合成方式:构造的问题主要考察不同因素之间的依赖关系和逐步推理计算。尽量排除对不必要的生活常识的依赖,尽量简化数字计算(采用模23取余数)。数据集规模足够大,确保各种模式超过LLM所能记住的规模。
GPT-2规模的模型在处理这种推理问题时表现出色:
能够给出最佳的逐步求解过程并逐步计算,甚至不需要从问题开始逐步反向分解,原文称为Level-1推理。并非暴力枚举探索求解。
在生成第一个token之前,LLM就已经能确定最佳求解过程。
实际上在提出问题之前,LLM在内部已经构建了所有参数之间的依赖关系,原文称为Level-2推理。这种能力超越了普通人类的推理水平。
数据集中没有任何Level-1和Level-2推理算法的说明,这种求解能力完全是LLM从预料中的各种问题数据中自然学习到的。
在这个问题上,LLM犯的错误并非随机抽样导致的,在生成第一个token之前就可以通过内部状态检测出它会犯哪些错误,存在系统性的错误。
模型深度直接影响这种“预先心算”能力的准确率和能够推理的深度。
CoT对这种能力没有改善,原作者认为该场景相当于已经使用了CoT。
GPT4o在该问题上也无法做超过10步的推理(给出最佳求解路径),而在此问题的合成数据上训练的GPT-2规模的模型可以做深度超过30步的推理,并能够泛化到比训练数据更深更难的问题上。
这里一个重要的发现是:LLM确实能够进行心算,而且这种能力与模型深度直接相关。虽然目前实用的LLM在这方面的能力看起来很弱,但大概可以通过在预训练数据中大量增加常见解决问题的方案的数据来提升模型这方面的能力。
就不要指望小参数规模的模型能做太好的心算推理了,还是老老实实的用CoT吧。
原作者认为CoT对这种问题没有改进,但我对此有不同看法。我认为,最狭义的CoT应该通过逐步分解问题的依赖项,反向分析后,再正向给出变量的计算过程。这种方式的难度应该更低,且我估计大概率更有效。原作者的问题设定相当于要直接输出最终结果(最佳解决方案)。
这个实验给了我们希望:只要预训练阶段的对于目标问题的合成数据造的足够,LLM能够自发地学到一些相当不错的能力,只要模型深度足够。对于在CPT阶段能达到什么程度不得而知,微调阶段靠少量数据还是别想了。不过这就导致它依旧是能做完整预训练的LLM炼丹厂的游戏,如果不能自己搞大规模数据从零训练的话,还是继续等别人吧。
Part 2.2 如何从失败中学习
(继续前面的问题设定)
在LLM犯错后,能够从模型内部状态识别出它自己(或者说之前的过程)犯错了。
可以旁路训练一个正确检测模型来进行识别和指导回退,但这种方法对效果的提升非常有限,因为它依赖于原模型继续通过随机试错来改进结果。这与beam search的收益非常有限的原因类似。
通过在预训练数据中引入回退token以及错误回退的数据,可以让模型学会纠错能力,即能够在推理过程中对于发现的错误进行回退。即使并没有标识出所有的错误也是如此。这种方式提升很显著。(但使用时通过犯错仍会影响输出文本,需要后处理环节剔除。)
在训练数据中加入这种带有不完全召回的回退标记的错误数据并不会增加实际使用过程中模型输出过程中犯错的概率,只需要使用较低的temperature进行推理。
不需要使用label mask来避免模型学习犯错的过程而只学习改错的过程。
这个过程只能在预训练阶段完成,单靠微调对此没有正向收益,还经常有负向收益。改错能力是一个比识别错误难得多的能力,无法在微调阶段学得。
整体的思路是符合一般直觉的,但这个工作的贡献在于:发现模型自我改错的能力不能仅靠微调阶段完成,仍然需要在预训练阶段增加合成数据。这还是LLM炼丹厂的游戏,或者是自己能完成0.1B参数模型的数据合成与训练的团队才行。这是一个希望,但并不便宜。
原文认为混有不完全标注的错误数据并不影响模型的正确性,这是在保持较低temperature的条件下的。但如果是一个通用模型,经常不能要求整个回答都使用较低的temperature。在temperature接近1的情况下,是否还能不提升犯错概率,仍有待实验验证。我认为在高temperature(0.8-1)下很可能会增加错误率。在这种情况下,就需要依靠label mask方式来降低模型学习犯错过程的比例,而仅学习改错过程。
2.6、层次化的语言结构(Part 1)
本节内容从视频01:33:23开始
语言模型非常擅长学习文本的格式,其学习速度远超知识推理等其他任务。这可能很大程度上导致了模型的“幻觉”现象。
原作者构造了一个对人来说很困难的CFG(contextr-free grammar)文法问题来让LLM学习,发现GPT能够学的很好。
模型架构实验发现:GPT+相对位置编码效果是最好的,GPT+旋转位置编码稍差,明显好于GPT+绝对位置编码。甚至固定attention pattern的GPT2的效果都很不错,明显好于绝对位置编码。后续的LLM架构改进可以考虑参考这点。
GPT可以学习被破坏的(不完全严格的)CFG语法。
GPT使用了一种特殊的2步的动态规划来学习CFG,而这种能力是BERT类模型所不具备的。而且语料库中并没有任何关于动态规划的知识,仅有CFG文法数据的合成数据。
这种特殊的动态规划知识甚至曾是2005年国际信息学奥林匹克竞赛的一道考题,而原作者当年参赛都没能解答出来。这个发现令原作者也大为震惊,并促使他长期投入到本文系列方向的研究中。
本节没提用的GPT是什么规模的,但考虑到原作者的算力和前面的研究思路,可以推测大概率使用的是GPT2 0.1B。
这项研究为我们提供了一个重要的新视角:许多人都知道LLM擅长学习文本格式,但这个研究展示了其能力之高。即使是参数较少的GPT也能自主创造出一些绝大多数人无法想象的算法,去学习一些在人来看完全没法解读的CFG文法(文本格式),这个能力甚至是国际信息学奥林匹克竞赛级别的。
这再次验证了一个观点:LLM能够学习各种类型的知识/信息,只是其擅长的领域与人类不同。LLM倾向于优先学习其认为容易或显然的知识,而这些知识对人类来说可能极难理解。人类以为是幻觉的东西,在LLM看来可能是显然的规律。只是我们没能对齐LLM的学习目标与人类的意图罢了。这提示我们在合成数据的过程中必须格外谨慎,避免引入我们不期望学习但又容易被LLM学到的内容。
GPT2仍然很强,不过原版真的该扔了,位置编码要换。
BERT再一次中枪。
3、个人总评
3.1、小规模模型 与 合成数据
尽管在实验中使用的模型规模较小,但这一系列的研究还是取得了许多重要发现,这些发现大多符合大家在炼丹过程中的直觉。
整个系列应该都是基于0.1B规模的模型来做的,完全依赖为问题定制的合成数据,而不包含其他数据。令人惊讶的是,这些小规模模型在许多任务中的表现远超预期,甚至完成了一些连GPT-4都无法胜任的任务。
这种方法对于资金有限的团队具有重要借鉴意义,虽然仍然不算特别便宜,但至少是可行的。对于特定场景下,这种方法的效果和成本已经相当不错,能够在技术方案工具箱里上占据一席之地。
这一方法也可以被LLM炼丹厂借鉴,不过具体是在CPT就能用,还是需要更多数据在PT阶段才行就不知道了。不过这也不是我们要关注的问题了,等LLM炼丹厂自己尝试。
这一系列的工作也一再确认了针对性的数据增强的重要性。否则,LLM很可能不会以人类期望的方式进行学习和预测,这会显著限制后续微调阶段能取得的迁移效果。
3.2、GPT pretrain >> Bert 与 微调
令人意外的是,这个系列研究多次发现BERT类模型的能力系统性的差于Decoder类模型。这与此前的一些经验直觉相吻合。而该系列工作的结果也验证了现在GPT系方案的成功是有其原因的,甚至BERT在小规模参数上的生态位可能都守不住。
关于微调的能力边界,自去年开始,两大派观点已经分庭抗礼。每个人都有自己的预测。我原本也不认为微调阶段能学到很多种能力,但本文提到的一些问题,微调无法完成的程度甚至还低于我对微调的预估。
目前来看,许多能力的获得仍然是LLM炼丹厂的壁垒。要么他们自己合成数据来搞,要么他们开放领域模型训练,允许用户合成大量数据与它内部的私有数据一起训一个“领域模型”。如果有人能够开源或者众包一个全面且高质量的、适合0.1B-10B规模模型的预训练数据集,大概整个生态能够更加繁荣吧。0.1B规模的完整预训练总还是能做得起的,数据合成的成本小团队咬咬牙也能做的。
CPT能做到什么程度还不清楚,这个有待于有钱的团队来探索了。
3.3、未来预估
我预计这个系列的研究会吸引学界其他研究者、LLM炼丹厂、应用层有钱做各种微调实验的团队来跟进。看起来无论是从创新性还是应用价值上都还比较蓝海,也符合很多学术和技术的人的品味。
虽然说中间件层和算力/推理infra层不那么关注这些研究,但需求已在路上。是否抓住这一商机是一个值得思考的问题。我认为,这一系列研究所采用的小规模模型训练、合成数据以及开源模型CPT等方法,都会成为长期技术方案。直到有人能够实现不必在预训练阶段将这些能力耦合在一起学习,而是能够独立学习时,这种趋势才可能发生改变。
A、系列介绍
本专栏的论文选读是面向那些不从0训练LLM的读者,例如中间件层、应用层的从业者等。从模型层逐步到应用层,学术论文对于生态中不同层面的人的价值也在逐渐递减,因此值得跨层推荐的学术材料并不多。这也导致许多中间件层和应用层的读者不太关注论文,或很难从论文中获得太多价值。
然而,随着LLM的模型层逐步解决一些本层面的工程问题,数据制备方面的工作持续增加,我们已经能够看到模型层和应用层在一些方面有趋同的迹象。不过学界的论文目前数量庞大,仍然需要有人进行筛选和推荐,才能让非模型层的读者在学术内容上投入时间获得足够的回报。
我个人关注学术材料的精力也十分有限,再加上具有普遍意义的材料比例并不高,但偶尔还是能够发现一些值得跨层推荐的内容。这些内容将成为本系列的材料。
交流与合作
如果希望和我交流讨论,或参与相关的讨论群,或者建立合作,请私信联系,见 联系方式。
本文于2024.7.28首发于微信公众号与知乎。
知乎链接:
https://zhuanlan.zhihu.com/p/711391378